package controlador;

import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import dominio.comun.sentidosMovimiento.SentidoAbajo;
import dominio.comun.sentidosMovimiento.SentidoArriba;
import dominio.comun.sentidosMovimiento.SentidoDerecha;
import dominio.comun.sentidosMovimiento.SentidoIzquierda;
import dominio.juego.Juego;
import dominio.pacman.Pacman;

public class PacmanController implements Runnable {

	public static final long INTERVALO_LECTURA = 1000;
	
	private Pacman pacman;
	private String path;

	public void setPacman(Pacman pacman) {
		this.pacman = pacman;
	}

	public void setPath(String path) {
		this.path = path;
	}

	public void controlarMovimiento() {
		Thread thread = new Thread(this);
		thread.start();
	}

	@Override
	public void run() {
		while (!Juego.getInstance().isFinJuego()) {
			this.leerMovimiento();
			try {
				Thread.sleep(INTERVALO_LECTURA);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

	private void leerMovimiento() {
		SAXReader reader = new SAXReader();
		try {
			Document document = reader.read(this.path);
			Element elemRaiz = document.getRootElement();
			this.setSentidoMovimiento(elemRaiz);
		} catch (DocumentException ex) {
			throw new RuntimeException();
		}
	}

	@SuppressWarnings("unchecked")
	private void setSentidoMovimiento(Element elemRaiz) {
		Iterator<Element> it = elemRaiz.elementIterator();
		Element pacman = it.next();
		String direccion = pacman.attributeValue("direccion");
		if (direccion.equals("izquierda")) {
			this.pacman.setSentidoMovimiento(new SentidoIzquierda());
		}
		if (direccion.equals("derecha")) {
			this.pacman.setSentidoMovimiento(new SentidoDerecha());
		}
		if (direccion.equals("arriba")) {
			this.pacman.setSentidoMovimiento(new SentidoArriba());
		}
		if (direccion.equals("abajo")) {
			this.pacman.setSentidoMovimiento(new SentidoAbajo());
		}
	}

}
